Global Z(),DIL$,XOFF,YOFF,ER,M$(),FILE$,TYPE,AA,MDE,FIL,PAT,INV,MAG,XZ,YZ,CX,CY,SX,SY,OX,OY,C(),FRMS,CELS,BNKS,CEL,HZ,F_ALT,A_ALT,GHO,MOU,SL,EROR$,FLAG,PLN,X_OF,Y_OF,R_
INIT
Do
Repeat
Multi Wait : MZ=Mouse Zone : MC=Mouse Click : M=X Screen(X Mouse)<128 : XY[M] : S=Scin(X Mouse,Y Mouse) : MOU
I$=Upper$(Inkey$) : SC=Scancode : SH=Key Shift : Clear Key : ALT=(SH and 48)<>False : SH=(SH and 3)<>False : If SC=33 : I$="S" : End If : If SC=50 : I$="X" : End If : If SC=52 Then I$="V"
If MC=2 and(MZ>88 and MZ<95 or MZ=84 or MZ=87) Then CLICK[MZ,""] : If Param Then Restore(MZ) : Read N : For M=0 To N-1 : Read M$(M,0),M$(M,1) : Next : MNU[N]
If MC=2 and MZ>96 Then CLICK[MZ,""] : If Param Then I$=Mid$(K$,MZ-83,1) : SH=True
If MC=1 and MZ>75 and MZ<84 Then I$=Str$(MZ-75)-" "
N=Instr("12345678",I$) : If N and SH=False Then BUTTN[PAT+75,"",True] : PAT=N : BUTTN[N+75,"",False]
If MC=1 and MZ>83 Then CLICK[MZ,""] : If Param Then I$=Mid$(K$,MZ-83,1) : SH=False
Ink I,1-I : Set Pattern PAT+27 and PAT<>8 : Paint(X+SX)/2,(Y+SY)/2
Screen Copy 2,160,0,320,128 To 1,160,0,%11100000
G_FR[CEL-1] : End If
If MDE=8 or MDE=9 : Screen 3 : Cls 0,0,0 To 160,128 : Screen 1 : Screen Copy 1,SX,SY,X+1,Y+1 To 3,0,0 : CX=X-SX+1 : CY=Y-SY+1 : End If
If MDE=9 : Cls 1-I,SX,SY To X+1,Y+1 : End If
If MDE<>8 : F_ALT=True : End If : If MDE=8 or MDE=9 : MDE=7 : MDE : End If
If AA : I$=Chr$(28) : End If
FZOOM : Screen False : End If
If SC=95 Then REQUEST['Read file "Animation.DOC"','from workbench for instructions',"Ok","",""]
Until Instr(K$+"2468 ()*+,-./EGIJLMNQRUWZ{~",I$)
If I$=Chr$(28) Then S_FR[Min(CEL+1,CELS)]
If I$=Chr$(29) Then S_FR[Max(CEL-1,1)]
If I$=Chr$(30) Then S_FR[1]
If I$=Chr$(31) Then S_FR[CELS]
If I$=" " and S=1 Then XY[X Screen(X Mouse)<160] : XZ=Min(Max((X-64/MAG)/16*16,160),320-128/MAG) : YZ=Min(Max(Y-(56/MAG),False),128-112/MAG) : Gosub BX : FZOOM : Multi Wait : Gosub BX
If I$="(" and CEL<CELS Then S_FR[CEL+1] : R_UN : Screen Copy 2,160,0,320,128 To 1,160,0,%11100000 : F_ALT=True : FZOOM
If I$=")" and CEL>1 Then S_FR[False] : Screen Copy 2,160,0,320,128 To 1,160,0 : Dec CEL : F_ALT=True : S_FR[CEL]
If I$="{" and CEL<>CELS : S_REQ["Copy forwards how many?",CELS-CEL,1] : If Param : Screen Copy 1,160,0,320,128 To 3,160,0 : R_=False : For C=CEL+1 To CEL+Param : S_FR[C] : Screen Copy 3,160,0,320,128 To 1,160,0,%11100000 : F_ALT=True : Next
FZOOM : R_=True : R_UN : A_ALT=True : End If : End If
If I$="?" Then INFO
If Instr("IP,.",I$) Then PL
If Instr("AGJRMNQUWZ",I$) Then Gosub I$
If Instr("ELS",I$) and SH=False and ALT=False Then Gosub I$
If I$="+" and SH=False and CELS<9999 Then Inc CELS : NIX[CELS] : S_FR[False]
If I$="-" and SH=False and CELS>1 Then Dec CELS : S_FR[Min(CEL,CELS)] : Del Icon CELS+1
M=Instr("FDBO\YVCX",I$) : If M and SH=False and ALT=False Then MDE=M : FIL=False : MDE
If I$="*" and SH=True and CELS>1 Then Del Icon CEL : F_ALT=False : Dec CELS : S_FR[Min(CEL,CELS)]
If I$="/" and SH=True and CELS<9999 Then S_FR[False] : Ins Icon CEL : NIX[CEL] : Inc CELS : S_FR[CEL]
If Instr("2468BCDEFLOSVX",I$) and SH Then Gosub "S"+I$ : FZOOM
If I$="+" and SH and CELS<9999 Then S_FR[False] : Ins Icon 1 : NIX[1] : Inc CELS : S_FR[CEL+1]
If I$="-" and SH and CELS>1 Then S_FR[False] : Del Icon 1 : Dec CELS : S_FR[Max(CEL-1,1)]
If Instr("SVX",I$) and ALT Then Gosub "�"+I$ : I$=""
If I$="*" and ALT and CELS-CEL+1>1 Then S_REQ["Delete how many?",Min(CELS-CEL+1,CELS-1),1] : If Param Then Del Icon CEL To CEL+Param-1 : Add CELS,-Param : F_ALT=False : S_FR[Min(CEL,CELS)]
If I$="/" and ALT and CELS<9999 Then S_REQ["Insert how many?",9999-CELS,1] : If Param Then Change Mouse 18 : MOU=18 : S_FR[False] : For N=1 To Param : Ins Icon CEL : NIX[CEL] : Next : Add CELS,Param : S_FR[CEL] : MOU
Loop
84 Data 2,"Add last frame","+","Remove last frame","-"
87 Data 2,"Add first frame","^+","Remove first frame","^-"
89 Data 5,"Play forwards",".","Play backwards",",","Play indefinitely","I","`Bounce'","^I","Set rate...","R"
90 Data 5,"Undo","U","New animation","N","Change zoom","M","Clear all frames","E","Quit","Q"
91 Data 5,"Load animation...","L","Append animation...","J","Load frame...","^L","Save as...","�S","Save frame...","^S"
92 Data 5,"Cut frame","^X","Cut & remove","�X","Remove frame","^*","Remove block...","�*","Clear frame","^E"
93 Data 4,"Copy frame to next","(","Copy frame to previous",")","Copy forwards","{","Copy frame","^C"
94 Data 4,"Paste frame","^V","Insert & paste","�V","Insert frame","^/","Insert block...","�/"
A: AA= Not AA : CHECK[88,AA] : Return
E: CONFIRM["Clear"] : If Param Then For F=1 To CELS : NIX[F] : Next : F_ALT=False : S_FR[CEL] : Return Else Return
G: GHO= Not GHO : GHO : Return
J: LD[False] : Return
L: LD[True] : Return
M: MAG=6-MAG : FZOOM : Return
N: ERA["Delet"] : Return
Q: ERA["Quit"] : If Param Then Erase 2 : Edit Else Return
R: S_REQ["Set Rate",60,HZ] : If Param Then HZ=Param : Return Else Return
S: SVE[False] : Return
W: INV=3-INV : Return
U:
Z: Screen Copy 1,160,0,320,128 To 2,160,0 : Screen Copy 3,160,0,320,128 To 1,160,0 : Screen Copy 2,160,0,320,128 To 3,160,0 : Screen 2 : G_FR[CEL-1] : Screen False : FZOOM : Return
SL: Repeat : FSEL["","Load an ILBM picture"] : F$=Param$ : If F$="" Then Return
Until Exist(F$) : ER=False : MOU=18 : Change Mouse 18 : Open In 1,F$ : CHUNK["G_ILBM","","ROOT",Lof(1)] : If ER Then REQUEST[EROR$,"Abandoning Load","Ok","",""]
Screen Open 1,320,128,2,Lowres : Screen Display 1,128,108,, : Get Sprite Palette : Curs Off : Cls 0 : Set Pattern 2 : Set Paint True : Ink 0,1,1 : Bar 128,-1 To 159,128 : Clip 160,0 To 320,128 : NIX[1]
Screen Open 2,320,128,2,Lowres : Screen Display 2,128,108,, : Clip 160,0 To 320,128 : Cls False
Screen Open 3,320,128,2,Lowres : Screen Display 3,208,108,160, : Screen Offset 3,160,0 : Get Sprite Palette : Screen Hide 3 : Cls 0 : Wait Vbl : Dual Playfield 1,2 : Unpack 15 To 0 : Reserve Zone 100 : Limit Mouse 128,50 To 447,235
Get Rom Fonts : N=1 : F=False : T$="TIMES.FONT 11 " : While Font$(N)<>"" : If Left$(Upper$(Font$(N)),34)=T$ : Set Font N : F=True : End If : Inc N : Wend
If Not F : Get Disc Fonts : N=1 : While Font$(N)<>"" : If Left$(Upper$(Font$(N)),34)=T$ : Set Font N : F=True : End If : Inc N : Wend : If Not F : Set Font 0 : End If : End If
For Z=0 To 6 : SZ[100-Z,Z*20+5,32,Z*20+24,51] : Next : SZ[92,105,12,124,31] : SZ[93,125,12,144,31]
For Z=0 To 2 : SZ[91-Z,Z*20+257,6,Z*20+276,25] : Next
For Z=0 To 4 : SZ[88-Z,Z*12+257,28,Z*12+268,39] : Next
Z=76 : For Y=4 To 23 Step 19 : For X=147 To 204 Step 19 : SZ[Z,X,Y,X+18,Y+18] : Inc Z : Next : Next
Amal 0,"L: P;I X<>XM J A; I Y<>YM J A;J L;A: L X=XM; L Y=YM; L RA=-1; J L" : Amal On
BUT_O[70,105,30,"Ok"] : Ink 1 : Draw 70+XOFF,14+YOFF To 190+XOFF,14+YOFF
Sprite 8,X Hard(9+XOFF),Y Hard(11+YOFF),16 : Channel 1 To Sprite 8 : Amal 1,"L: L A=16; L Y=Y+3; F R0=1 T 200; N R0; L A=17; L Y=Y-3; F R0=1 T 200; N R0; J L;" : Amal On
Repeat : Repeat : Until Mouse Click and Mouse Zone=70 : CLICK[70,"Ok"] : Until Param
Sprite Off 8 : DILOG_C[70]
End Proc
Procedure SVE[NEW]
On Error Proc OOPS
P=False
If FILE$="" or NEW
FSEL[".PAF","Save as what name?"]
If Param$="" : Goto FIN : End If
If Exist(Param$) : REQUEST["File exists.","Overwrite?","Yes","Cancel",""] : If Param=2 : Goto FIN : End If : End If
POS=Pof(1)+LGTH+(LGTH mod 2) : If POS>LIM Then EROR$="Corrupt IFF file" : ER=True : Pop Proc
TYPE$="" : If CLAS$="LIST" or(CLAS$="CAT ") or(CLAS$="PROP") or(CLAS$="FORM") Then TYPE$=Input$(1,4)
If TYPE$="" and(FTHR$<>"FORM") and(FTHR$<>"PROP") Then EROR$="Illegal IFF construction" : ER=True : Pop Proc
Gosub CLNT$ : If ER Then Pop Proc
If CLAS$="CAT " and FLAG and 4 Then CHUNK[CLNT$,"","CAT ",POS]
If CLAS$="LIST" and FLAG and 2 Then CHUNK[CLNT$,"","LIST",POS]
If CLAS$="PROP" Then If FTHR$="LIST" Then Pof(1)=Pof(1)-12 : PROP$=PROP$+Input$(1,LGTH+8+(LGTH mod 2)) Else EROR$="Illegal IFF construct" : ER=True : Pop Proc
Pof(1)=POS
Until Pof(1)=LIM or FLAG and 1
Pop Proc
G_ILBM:
If CLAS$="FORM"
If TYPE$="ILBM"
If FTHR$="LIST"
CHUNK["F_ILBM",PROP$,"FORM",POS]
Else
CHUNK["F_ILBM","","FORM",POS]
End If : FLAG=%1
Else
CHUNK[CLNT$,"","FORM",POS]
End If
End If
FLAG=FLAG or %110 : Return
F_ILBM:
If CLAS$="BMHD" or(CLAS$="CAMG") or(CLAS$="CMAP") Then Pof(1)=Pof(1)-8 : F=Free : PROP$=PROP$+Input$(1,LGTH+8+(LGTH mod 2))